Description
Release 2. The picker matches filenames only. Add a content search across the vault/working dir (ripgrep if available, else a Go walk) surfacing files + matching lines; open at the match. Was explicitly deferred in v1.1.
Acceptance Criteria
- #1 Search note contents across the vault; results show file + matching line
- #2 Selecting a result opens the file at the match
Implementation Plan
- search.go: contentSearch(root,query) โ ripgrep (rg -g *.md, exit-1=empty) with goWalkSearch fallback; SearchHit{Path,Line,Text}; cap maxHits. 2. picker: result type {path,line,text}; '/'-prefixed query runs content search, else filename fuzzy; Selected()/SelectedLine(); listView shows relpath:line text. 3. app: Enter on a content hit Loads then GotoLine(ln). 4. README+help document '/query' content search. 5. TDD throughout.
Implementation Notes
search.go (rg with go-walk fallback, SearchHit, maxHits cap); picker '/'-prefix runs contentSearch, result{path,line,text}, Selected()/SelectedLine(), rowLabel shows file:line text; app Enter GotoLine on a hit; README+help document /query. 7 tests, all green.